package cn.highedu.coolshark_product.service;

import cn.highedu.coolshark_product.pojo.dto.AdminAddNewDTO;
import cn.highedu.coolshark_product.pojo.dto.AdminLoginInfoDTO;
import cn.highedu.coolshark_product.pojo.vo.AdminListItemVO;
import cn.highedu.coolshark_product.pojo.vo.AdminLoginInfoVO;
import cn.highedu.coolshark_product.pojo.vo.AdminStandardVO;
import cn.highedu.coolshark_product.pojo.vo.JwtVO;

import java.util.List;

/**
 * 处理管理员数据的业务类接口
 */
public interface IAdminService {
    /**
     * 添加管理员
     * @param adminAddNewDTO 封装了管理员数据
     */
    void addNew(AdminAddNewDTO adminAddNewDTO);

    /**
     * 删除管理员 系统管理员不能删除
     * @param id 管理员id
     */
    void delete(Long id);

    /**
     * 批量删除管理员
     * @param ids 管理员id的数组
     * 系统管理员不能删除
     */
    void delete(Long[] ids);

    /**
     * 为管理员添加角色
     * @param adminId 管理员id
     * @param roleIds 角色id数组
     */
    void addRoles(Long adminId, Long[] roleIds);

    /**
     * 根据id查询管理员
     * @param id 管理员id
     * @return 管理员信息
     */
    AdminStandardVO getAdminById(Long id);

    /**
     * 查询所有管理员信息
     * @return
     */
    List<AdminListItemVO> list();

    /**
     * 根据用户名查询管理员数据
     * @param username 用户名
     * @return 登录用户对象 如果没有匹配的数据 返回null
     */
    AdminLoginInfoVO getAdminLoginInfo(String username);

    /**
     * 根据登录的表单信息登录系统
     * @param adminLoginInfoDTO 登录表单信息
     * @return 登录成功后返回JWT令牌
     */
    JwtVO login(AdminLoginInfoDTO adminLoginInfoDTO);
}
